/**
 * 
 */
package uk.ac.manchester.cs.graph;

import java.util.Set;

/**
 * @author Pavel Klinov
 *
 * pklinov@cs.man.ac.uk, pklinov@clarkparsia.com
 * 
 * Feb 3, 2009
 */
public interface Hypergraph<V, E> {

	public Set<V> getVertices();
	public Set<Hyperedge<V, E>> getHyperedges();
	
	public Hyperedge<V, E> addHyperedge(E object, Set<V> vertices);
	public void addVertex(V vertex);
	
	public void removeHyperedge(Set<V> vertices);
	public void removeVertex(V vertex);
	
	public int getVertexDegree(V vertex);
	public Set<V> getAdjacentVertices(V vertex);
	public Set<Hyperedge<V, E>> getIncidentHyperedges(V vertex);
	
	public Hyperedge<V, E> findHyperedge(Set<V> vertices);
	
	public boolean isConnected();
}
